import log from '@/utils/log';
import { getContent, noticeToStoryPriorityGroup, noticeToTechGroup, sendMsg } from '../dingtalk/func';
import { pmUserList } from '../configs/tapd';

export default async (type: string, event: TapdStoryEventType) => {
  const {
    id,
    name,
    object_type: objectType,
    custom_field_six: techOwner,
    owner,
    custom_field_seven: operateOwner,
    custom_field_9: prodOwner,
    'status:fromto': statusChange,
  }: TapdStoryEventType = event;

  // 判断是需求
  if (objectType !== 'story') {
    log.error('/api/tapd/fieldchange只处理需求', JSON.stringify(event));
    throw Error('这里只处理需求。');
  }
  // 当需求状态调整为【排期中（PRD评审通过）】
  if (type === '1') {
    // 状态改变，并且是从【PRD完成（待评审、UI设计中）】调整为【排期中（PRD评审通过）】
    if (statusChange && statusChange.from === 'status_13' && statusChange.to === 'status_3') {
      await sendMsg(id, operateOwner.concat(prodOwner), name, '该需求已评审通过，请及时补充需求的运营计划、目标值、目标基线！');
    }
  } else if (type === '2') {
    const beforeStates = ['planning', 'resolved', 'status_3', 'status_13', 'status_29', 'status_35'];
    // 状态改变，从之前的状态调整为【排期中（PRD评审通过）】
    if (statusChange && beforeStates.includes(statusChange.from) && (statusChange.to === 'status_17' || statusChange.to === 'status_4')) {
      const content = getContent('该需求已输出排期，请owner及时提醒所有成员录入相应任务！', owner, techOwner);
      // 当需求状态由排期中（PRD评审通过）调整为【排期完成（待开发）】/【开发中】
      await sendMsg(id, techOwner.concat(owner), name, content);
    }
  } else if (type === '3') {
    // 状态改变，并且是从【生产发布完成】调整为【项目目标review】
    if (statusChange && statusChange.from === 'status_5' && statusChange.to === 'status_7') {
      const userList = operateOwner.concat(prodOwner);
      await sendMsg(id, userList, name, '该需求需进行项目目标review，请及时补充需求的运营结果、目标结果！');
    }
  } else if (type === '4') {
    // 需求评审未通过通知到需求排期群
    await noticeToStoryPriorityGroup(id, `需求: ${name}`, ['该需求评审未通过，请关注！']);
  } else if (type === '5') {
    const content = getContent('该需求已通过评审两日，请及时输出排期并调整需求状态！', owner, techOwner);
    // 排期中（PRD评审通过），保持这个状态的第二天通知owner输出排期并调整状态
    await sendMsg(id, techOwner.concat(owner), name, content);
  } else if (type === '6') {
    const content = getContent('该需求已通过评审4天，请及时输出排期并调整需求状态！', owner, techOwner);
    // 排期中（PRD评审通过），保持这个状态的超过4天， 通知owner及pmo输出排期并调整状态
    await sendMsg(id, techOwner.concat(pmUserList, owner), name, content);
  } else if (type === '20') {
    // 需求未按时交付，通知到技术群
    await noticeToTechGroup(id, `需求: ${name}`, ['该需求未按时交付，请关注！']);
  }
};
